#pragma once
#include <stdio.h>
#include <assert.h>
#include <stdlib.h>
#include <stdbool.h>
#include <string.h>
//堆在物理结构是顺序表,在逻辑结构上是一棵完全二叉树

typedef int HPDataType;
typedef struct  Heap
{
	HPDataType* arr;
	//记录有效数据
	int size;

	//记录堆的容量
	int capcity;
}Heap;
//针对小堆

//初始化堆
void HeapInit(Heap* pile);

//建立堆
void HeapCreate(Heap* hp, HPDataType * arr, int size);

//插入
void HeadPush(Heap* pile,HPDataType value);

//向上调整
void AdjustUp(HPDataType* arr,int child);

//向下调整
void AdjustDown(HPDataType* arr, int parent, int size);

//规定删除根节点
void HeapPop(Heap* pile);

//获取堆顶元素
HPDataType HeadTop(Heap* pile);


//获取堆的元素个数
int HeapSize(Heap* pile);

//堆是否为空
bool HeapEmpty(Heap* pile);

//销毁堆
void HeapDestory(Heap* pile);


